# == Schema Information
# Schema version: 33
#
# Table name: mensajes
#
#  id         :integer(11)   not null, primary key
#  regalo_id  :integer(11)   
#  autor      :string(1)     
#  texto      :text          
#  created_at :datetime      
#  updated_at :datetime      
#  visto_at   :datetime      
#

class Mensaje < ActiveRecord::Base
  belongs_to :regalo
  after_create :crea_evento_mensaje
  validates_presence_of :regalo_id, :on => :create
  validates_presence_of :texto, :on => :create
  validates_inclusion_of :autor, :in => %w( r i ), :on => :create
  
  # ¿El mensaje ha sido visto por el usuario?
  def visto?
    return self.visto_at != nil
  end

  # Comprueba si +usuario+ es el autor del mensaje
  def autor?(usuario)
    if (regalo.remitente_id == usuario.id && autor == 'r')
      return true
    elsif (regalo.invitado_id == usuario.id && autor == 'i')
      return true
    else
      return false
    end
  end
  
  # Devuelve cierto si el mensaje no ha sido visto por el otro usuario y soy
  # el autor del mensaje, falso en otro caso.
  def modificable?(usuario) #incluye la posibilidad de borrar
    if autor == "r"
      (regalo.remitente_id == usuario.id) and !visto?
    else
      (regalo.invitado_id == usuario.id) and !visto?
    end
  end

protected
  ## Callbacks ##
  def crea_evento_mensaje    
    if autor == "r" and regalo.invitado
      evento = Evento.find_by_regalo_id_and_tipo(regalo_id, "rcmn-invitado")
      if evento
        evento.update_attributes(:created_at => Time.now, :visto => false)
      else
        Evento.create(:usuario_id => regalo.invitado.id, :regalo_id => regalo_id, :tipo => "rcmn-invitado")
      end     

    elsif autor == "i" and regalo.remitente #está escribiendo el invitado
      evento = Evento.find_by_regalo_id_and_tipo(regalo_id, "rcmn-remitente")
      if evento
        evento.update_attributes(:created_at => Time.now, :visto => false)
      else
        Evento.create(:usuario_id => regalo.remitente.id, :regalo_id => regalo_id, :tipo => "rcmn-remitente")
      end 
    end
  end
  ## /Callbacks ##
end
